package com.dco.dcowebhook.service;

import org.springframework.stereotype.Service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.regex.*;

@Service
public class DcoService {

    private static final Logger logger = LoggerFactory.getLogger(DcoService.class);

    private static final Pattern DCO_REGEX = Pattern.compile("^Signed-off-by:\\s+([^<]+)<([^>]+)>$");

    /**
     * 检查提交消息中是否包含有效的 Signed-off-by 行。
     *
     * @param commitMessage 提交消息
     * @return 是否包含有效的 DCO
     */
    public boolean validateDco(String commitMessage) {
        logger.debug("开始验证 DCO 签名。");
        String[] lines = commitMessage.split("\\r?\\n");
        for (String line : lines) {
            Matcher matcher = DCO_REGEX.matcher(line.trim());
            if (matcher.matches()) {
                logger.debug("找到有效的 DCO 签名。");
                return true;
            }
        }
        logger.debug("未找到有效的 DCO 签名。");
        return false;
    }

    /**
     * 验证 Webhook 请求的签名。
     *
     * @param signature      请求头中的签名
     * @param webhookSecret 配置的 Webhook Secret
     * @return 是否验证通过
     */
    public boolean verifySignature(String signature, String webhookSecret) {
        if (webhookSecret == null || webhookSecret.isEmpty()) {
            logger.debug("未设置 WEBHOOK_SECRET，跳过签名验证。");
            return true;
        }

        if (webhookSecret.equals(signature)) {
            logger.debug("Webhook 签名验证通过。");
            return true;
        } else {
            logger.warn("Webhook 签名验证失败。");
            return false;
        }
    }
}
